package com.tfjybj.itoo.teach.provider.service;

import com.dmsdbj.itoo.tool.base.service.BaseServicePlus;
import com.dmsdbj.itoo.tool.business.ItooResult;
import com.github.pagehelper.PageInfo;
import com.tfjybj.itoo.teach.entity.ProfessionEntity;
import com.tfjybj.itoo.teach.model.ProfessionModel;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;


/**
 * ProfessionService接口
 * profession表
 *
 * @author 田成荣
 * @version 2.0.0
 * @since 2.0.0 2018-11-08 19:34:10
 */
public interface ProfessionService extends BaseServicePlus<ProfessionEntity> {
	
	//region 模板生成：模糊查询
    /**
     * 根据专业名称模糊查询profession
     *
     * @param name  专业名称
     * @param pageNo   页码
     * @param pageSize 页数
     * @return 模糊查询的profession
     * @author 田成荣
     * @since 2.0.0 2018-11-08 19:34:10
     */
    PageInfo<ProfessionEntity> queryByLikeName(String name, Integer pageNo, Integer pageSize);
    //endregion

    /* **********************************以下为非模板生成的内容********************************* */
    /**
     * 根据教学部门id查询专业信息（带分页）
     * @param academyId  学院id
     * @param pageNo   页码
     * @param pageSize 页数
     * @return 查询的profession
     * @author 杨燕梅
     * @since 2.0.0 2018-11-15 15:54:55
     */
    PageInfo<ProfessionModel>queryByAcademyIdPageInfo(String academyId, Integer pageNo, Integer pageSize);

    /**
     * 根据教学部门id查询专业信息
     * @param academyId  学院id
     * @return 查询的profession
     * @author 杨燕梅
     * @since 2.0.0 2018-11-18 09:17:11
     */
    List<ProfessionModel>queryByAcademyId(String academyId);

    /**
     * 根据专业名称查询professions
     * @param name  专业名称
     * @return 查询的profession
     * @author 田成荣
     * @since 2.0.0 2018-11-08 19:34:10
     */
    List<ProfessionModel> queryProfessionsByName(String name);

    /**
     * 查询所有专业层次
     *
     * @return nature  专业层次
     * @author 杨燕梅
     * @since 2.0.0 2018-11-28 14:59:20
     */
    List<ProfessionModel> queryAllNature();

    /**
     * 查询所有学制
     *
     * @return schoolLength  学制
     * @author 杨燕梅
     * @since 2.0.0 2018-11-28 14:59:40
     */
    List<ProfessionModel> queryAllSchoolLength();

    /**
     * 查询所有专业
     * @return
     * @author 杨燕梅
     * @since 2.0.0 2018-11-28 14:59:40
     */
    List<ProfessionEntity> queryAllProfession();

    /**
     * 根据专业名称模糊查询某一学院下属专业
     *
     * @param searchContent  专业名称
     * @param pageNo   页码
     * @param pageSize 页数
     * @param academyId 学院id
     * @return 模糊查询的某一学院下属专业
     * @author 杨燕梅
     * @since 2.0.0 2018-11-28 20:21:04
     */
    PageInfo<ProfessionModel> queryByLikeNameAndAcademyId(String academyId, Integer pageNo, Integer pageSize, String searchContent);

    /**
     * 根据专业ID查询专业详情
     *
     * @param idList 专业ID
     * @return 专业实体集合
     * @author 杨燕梅
     * @since 2.0.0 2018-12-12 20:04:33
     */
    List<ProfessionModel> queryProfessionById(List<String> idList);

    /**
     * 根据ID导出专业信息
     *
     * @param response 响应
     * @param idList   专业ID
     * @return 导出结果信息
     * @author 杨燕梅
     * @since 2.0.0 2018-12-12 20:04:39
     */
    ItooResult exportByProfessionId(HttpServletResponse response, List<String> idList);

    /**
     * 根据条件导出专业
     *
     * @param response     响应
     * @param searchContent    专业名称/专业简称
     * @return 导出结果信息
     * @author 杨燕梅
     * @since 2.0.0 2018-12-23 16:49:39
     */
    ItooResult exportByStrLike(HttpServletResponse response, String academyId, String searchContent);

    /**
     * 下载专业模板，批量导入使用
     *
     * @param response 响应
     * @return 下载模板是否成功
     * @author 杨燕梅
     * @since 2.0.0 2018-11-30 10:26:08
     */
    boolean downLoadTemplate(HttpServletResponse response);

    /**
     * 批量导入专业
     * @param multipartFile
     * @param request
     * @param response
     * @return
     * @author 杨燕梅
     * @since 2.0.0 2018-11-30 11:23:29
     */
    ItooResult importTemplate(MultipartFile multipartFile, HttpServletRequest request, HttpServletResponse response);

    /**
     * 根据errorListId导出未成功导入的信息
     *
     * @param response    响应
     * @param errorListId 为成功导入的分组id
     * @return 导出结果
     * @author 杨燕梅
     * @since 1.0.0 2018-12-2 10:24:26
     */
    boolean exportErrorList(String errorListId, HttpServletResponse response);

    /**
     * 根据专业性质（专业层次）汉字（本科，专科，专升本）查询相应代码
     * @param name  专业性质（专业层次）汉字
     * @return 专业层次的相应代码
     * @author 杨燕梅
     * @since 2.0.0 2018-12-2 20:28:43
     */
    String queryNatureIdByName(String name);

    /**
     * 根据专业名称获取专业Id作为班级的专业Id
     * @param professionName  专业名称
     * @return 专业Id
     * @author 杨燕梅
     * @since 2.0.0 2018-12-5 20:46:06
     */
    String queryProfessionIdByName(String professionName);

    /**
     * 根据专业代码和专业名称查询专业是否已存在
     *
     * @param code   专业代码
     * @param name   专业名称
     * @return 专业信息
     * @author 杨燕梅
     * @since 2.0.0 2018-12-20 09:49:06
     */
    List<ProfessionEntity> queryByCodeAndNameExist(String code, String name);

    /**
     * 将数据保存到权限中去
     *
     * @param professionEntity
     * @author 李建帅
     * @since 2.0.0 2018-12-9 19:18:10
     */
    void saveToAuth(ProfessionEntity professionEntity);

    /**
     * 根据学院ID查询专业信息
     *
     * @param academyId 学院ID
     * @return 根据学院ID查询专业信息
     * @author 杨江涛
     * @since 2.0.0 2018-11-23 15:50:35
     */
    List<ProfessionEntity> findByAcademyId(String academyId);

    /**
     * 根据学院id,查询符合条件的专业
     *
     * @param academyId 学院id
     * @return 专业集合
     * @author 马莹
     * @since 2019-4-30 21:19:55
     */
    List<ProfessionModel> inquirySpecialty(String academyId);
}
